Cargar Datos

Gráficos

Column

Chart A

Chart B

Column

Chart C

Chart D

Columns {data-width=350} ———————————————————————–

Chart E

### Chart F

Tablas

Acerca del estudio

---
title: "Dashboard trabajadores autónomos (1991-2019)"
author: Carlos Orts
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
    social: menu
    source_code: embed
#runtime: shiny
---

```{r setup, include=FALSE}
if(!require(flexdashboard)){install.packages('flexdashboard')
  library(flexdashboard)
}
if(!require(tidyverse)){install.packages('tidyverse')
  library(tidyverse)
}
if(!require(maps)){install.packages('maps')
  library(maps)
}
if(!require(DT)){install.packages('DT')
  library(DT)
}
if(!require(ggplot2)){install.packages('ggplot2')
  library(ggplot2)
}
if(!require(readr)){install.packages('readr')
  library(readr)
}
if(!require(rmarkdown)){install.packages('rmarkdown')
  library(rmarkdown)
}
```

# Cargar Datos 
```{r}

dat_base <- read.csv("../datos/data_base.csv")

```

Gráficos {data-icon="fa-signal"}
=======================================================================

```{r}
#selectInput("tipo_mov", label='Tipo Movimiento', choices = c('TODOS', vars), selected = 'TODOS', width = '200px')
#selectInput("pais_sel", label='Selecciona un pais', choices = c('TODOS', unique(datos$COUNTRY_REGION)), selected = 'TODOS', width = '200px')
```


Column {data-width=350}
-----------------------------------------------------------------------

### Chart A 

```{r}
# Calculamos la media de % de autoempleo por país a lo largo de todos los años
df_mean_per_country <- dat_base %>%
  group_by(country) %>%                                  # agrupa todas las filas por país
  summarise(mean = mean(self_employed_perc, na.rm = TRUE)) # calcula la media ignorando los NA

# Obtenemos el mapa base del mundo en formato de data frame con coordenadas
world_map <- map_data("world")  # contiene: long, lat, region (país), subregion, group

# Unimos el mapa con nuestros datos de promedio por país
map_data_joined <- world_map %>%
  left_join(df_mean_per_country, by = c("region" = "country"))
# Nota: "region" es el nombre de país en el mapa y lo unimos con nuestra columna "country"

# Creamos el gráfico
ggplot(map_data_joined, aes(x = long, y = lat, group = group, fill = mean)) +
  # Dibujamos los polígonos (países) con borde blanco
  geom_polygon(color = "white") +
  
  # Escala de color: gradiente de azul claro (bajo) a rojo oscuro (alto)
  # Los países sin datos se pintan de gris claro
  scale_fill_gradient(low = "lightblue", high = "darkred", na.value = "grey90") +
  
  # Títulos y leyenda
  labs(
    title = "Porcentaje de trabajadores autónomos por país",   # título principal
    subtitle = "Promedio de 1991 a 2019",                     # subtítulo opcional
    fill = "% Autoempleo"                                     # título de la leyenda
  ) +
  
  # Tema minimalista (fondo blanco y limpio)
  theme_minimal() +
  
  # Mantiene la proporción real del mapa (evita distorsiones)
  coord_fixed(1.3)
```

### Chart B

```{r}
year_sel = 1991

# Filtro de datos para un año específico
df_scatter <- dat_base %>%
  filter(year == year_sel)   # puedes cambiar el año a voluntad

# Diagrama de dispersión coloreado por continente
ggplot(df_scatter, aes(x = gdp, y = self_employed_perc, color = continent)) +
  geom_point(alpha = 0.7, size = 3) +  # puntos del scatter
  labs(
    title = "Relación entre PIB per cápita y % de autoempleo",
    subtitle = paste("Año", year_sel),
    x = "PIB per cápita (USD)",
    y = "% Autoempleo",
    color = "Continente"   # título de la leyenda
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    plot.subtitle = element_text(size = 12)
  ) +
  scale_x_continuous(labels = scales::comma) + # formato con comas en el eje X
  scale_color_brewer(palette = "Set2")   # paleta para categorías

```

Column {data-width=350}
-----------------------------------------------------------------------

### Chart C

```{r}
library(dplyr)
library(ggplot2)

# Selecciona el año que quieras
year_sel <- 2019

# ------------------------------
# Filtrar datos y seleccionar top y bottom 10
# ------------------------------

# Top 10 países con mayor % de autoempleo en el año seleccionado
top10 <- dat_base %>%
  filter(year == year_sel) %>%             # Filtra el dataframe por el año elegido
  arrange(desc(self_employed_perc)) %>%    # Ordena de mayor a menor según % autoempleo
  slice(1:10)                              # Toma las primeras 10 filas (top 10)

# Bottom 10 países con menor % de autoempleo en el año seleccionado
bottom10 <- dat_base %>%
  filter(year == year_sel) %>%             # Filtra por el mismo año
  arrange(self_employed_perc) %>%          # Ordena de menor a mayor
  slice(1:10)                              # Toma las primeras 10 filas (bottom 10)

# Combina top10 y bottom10 en un solo dataframe
df_lollipop <- bind_rows(top10, bottom10) %>%   
  mutate(country = factor(country,          # Convierte la columna 'country' en factor
                          levels = country[order(self_employed_perc)]))  
  # Esto asegura que los países se muestren en el eje X en orden ascendente de % autoempleo

# ------------------------------
# Lollipop plot
# ------------------------------

#Plot con color por continentes
ggplot(df_lollipop, aes(x = country, y = self_employed_perc, color = continent)) +   # Eje X = países, eje Y = % autoempleo
  geom_segment(aes(x = country, xend = country, y = 0, yend = self_employed_perc),
               color = "grey") +           # Dibuja la "varilla" desde 0 hasta el punto (línea vertical)
  geom_point(size = 4) +  # Dibuja el "lollipop" en el extremo de la varilla
  labs(
    title = "10 países con menos y mayor % de autoempleo",   # Título del gráfico
    subtitle = paste("Año", year_sel),                       # Subtítulo mostrando el año seleccionado
    x = "",                                                   # Eje X sin etiqueta
    y = "% Autoempleo"                                        # Eje Y con etiqueta
  ) +
  theme_minimal() +                                           # Tema limpio y minimalista
  theme(
    plot.title = element_text(face = "bold", size = 14),     # Formato del título
    plot.subtitle = element_text(size = 12),                 # Formato del subtítulo
    axis.text.x = element_text(angle = 45, hjust = 1)        # Rotar etiquetas de eje X para mejor lectura
  )
```

### Chart D

```{r}
# Selecciona el país que quieres analizar
country_sel <- "USA"

# Filtrar datos del país seleccionado
df_country <- dat_base %>%
  filter(country == country_sel) %>%
  select(year, self_employed_perc, continent)

# Calcular la media continental
continent_sel <- df_country$continent[1]  # asumimos que la columna 'continent' ya existe

df_continent <- dat_base %>%
  filter(continent == continent_sel) %>%
  group_by(year) %>%
  summarise(mean_self_employed_perc = mean(self_employed_perc, na.rm = TRUE))

# Crear gráfico
ggplot() +
  geom_col(data = df_country, 
           aes(x = factor(year), y = self_employed_perc), 
           fill = "steelblue") +  # barras del país
  geom_line(data = df_continent, 
            aes(x = factor(year), y = mean_self_employed_perc, group = 1), 
            color = "red", size = 1.2) +  # línea de la media continental
  geom_point(data = df_continent,
             aes(x = factor(year), y = mean_self_employed_perc), 
             color = "red", size = 2) +  # puntos de la media continental
  labs(
    title = paste("Evolución del % de trabajadores autónomos en", country_sel),
    subtitle = paste("Comparado con la media del continente:", continent_sel),
    x = "Año",
    y = "% Autoempleo",
    caption = "Barras: país | Línea roja: media continental"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    plot.subtitle = element_text(size = 12),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

```
Columns {data-width=350}
-----------------------------------------------------------------------

### Chart E
```{r}

library(ggplot2)
library(dplyr)
library(forcats)  # para reordenar factores

# Filtrar datos si quieres un año específico (opcional)
year_sel <- 2000
df_box <- dat_base %>%
  filter(year == year_sel)

# Reordenar continentes por mediana de autoempleo
df_box <- df_box %>%
  mutate(continent = fct_reorder(continent, self_employed_perc, median))

# Calcular media global
global_mean <- mean(df_box$self_employed_perc, na.rm = TRUE)

# Boxplot
ggplot(df_box, aes(x = continent, y = self_employed_perc, fill = continent)) +
  geom_boxplot(alpha = 0.7) +  # cajas con transparencia
  geom_jitter(width = 0.2, color = "black", alpha = 0.5, size = 2) +  # puntos individuales
   geom_hline(yintercept = global_mean, linetype = "dashed", color = "red", size = 1) +  # línea de media global
  labs(
    title = "Distribución del % de trabajadores autónomos por continente",
    subtitle = paste("Año:", year_sel),
    x = "Continente",
    y = "% Autoempleo",
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    plot.subtitle = element_text(size = 12),
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.position = "none"  # elimina la leyenda
  )
```
### Chart F

```{r}
# Agrupar datos por continente y año, calcular promedio por continente
df_line <- dat_base %>%
  group_by(continent, year) %>%
  summarise(promedio_cont = mean(self_employed_perc, na.rm = TRUE)) %>%
  ungroup()

# Calcular media global por año
df_global <- dat_base %>%
  group_by(year) %>%
  summarise(promedio_global = mean(self_employed_perc, na.rm = TRUE))

# Gráfico de líneas
ggplot() +
  # Línea por continente
  geom_line(data = df_line, aes(x = year, y = promedio_cont, color = continent), size = 1.2) +
  # Línea de media global
  geom_line(data = df_global, aes(x = year, y = promedio_global), color = "black", linetype = "dashed", size = 1) +
  labs(
    title = "Evolución del % de autoempleo por continente",
    subtitle = "Con línea de media global",
    x = "Año",
    y = "% Autoempleo",
    color = "Continente"
  ) +
  theme_minimal() +
  scale_color_brewer(palette = "Set2")  # paleta de colores para continentes
```



Tablas {data-icon="fa-table"}
=======================================================================
```{r}
datatable(dat_base,
          caption = 'Trabajadores autónomos (1991-2019)',
          rownames = T,
          filter = 'top',
          options = list(pageLenght = 25)
          
          )
```


Acerca del estudio {data-icon="fa-globe"}
=======================================================================